// void StrVec::alloc_n_move(size_t new_cap)
// {
// 	auto newdata = alloc.allocate(new_cap);
// 	auto dest = newdata;
// 	auto elem = elements;
// 	for (size_t i = 0; i != size(); ++i)
// 		alloc.construct(dest++, std::move(*elem++));
// 	free();
// 	elements = newdata;
// 	first_free = dest;
// 	cap = elements + new_cap;
// }

// void StrVec::reallocate()
// {
// 	auto newcapacity = size() ? 2 * size() : 1;
// 	alloc_n_move(newcapacity);
// }

// void StrVec::reserve(size_t new_cap)
// {
// 	if (new_cap <= capacity()) return;
// 	alloc_n_move(new_cap);
// }

// void StrVec::resize(size_t count)
// {
// 	resize(count, std::string());
// }

// void StrVec::resize(size_t count, const std::string& s)
// {
// 	if (count > size()) {
// 		if (count > capacity()) reserve(count * 2);
// 		for (size_t i = size(); i != count; ++i)
// 			alloc.construct(first_free++, s);
// 	}
// 	else if (count < size()) {
// 		while (first_free != elements + count)
// alloc.destroy(--first_free);
// 	}
// }